home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / files / t_sys5 / unixcpio.gz / unixnet.cpio / 8250.h < prev    next >
C/C++ Source or Header  |  1994-07-11  |  4KB  |  124 lines

  1. /* Various I/O definitions specific to asynch I/O on the IBM PC */
  2.  
  3. extern unsigned nasy;        /* Actual number of asynch lines */
  4. extern unsigned nhandlers ;    /* Number of interrupt handlers used for them */
  5.  
  6. /* Output pseudo-dma control structure */
  7. struct dma {
  8.     char *data;    /* current output pointer */
  9.     unsigned short cnt;    /* byte count remaining */
  10.     char last_octet;    /* previously output octet */
  11.     char flags;    /* transmitter active */
  12. };
  13.  
  14. /* Read fifo control structure */
  15. struct fifo {
  16.     char *buf;        /* Ring buffer */
  17.     unsigned bufsize;    /* Size of ring buffer */
  18.     char *wp;        /* Write pointer */
  19.     char *rp;        /* Read pointer */
  20.     unsigned short cnt;    /* count of characters in buffer */
  21. };
  22.  
  23. /* Asynch controller control block */
  24. struct asy {
  25.     struct fifo fifo;
  26.     struct dma dma;
  27.     unsigned addr;        /* Base I/O address */
  28.     unsigned vec;        /* Interrupt vector */
  29.     unsigned speed;        /* Line speed */
  30.     struct asy *ichain ;/* Next asy in interrupt vector chain */
  31.     unsigned (*urgent)();    /* Handler for urgent transmission */
  32.     struct {        /* Previous configuration saved at startup */
  33.         char divh,divl;    /* baud rate divisor */
  34.         char lcr;    /* line control reg */
  35.         char ier;    /* Interrupt enable register */
  36.         char mcr;    /* modem control bits */
  37.     } save;
  38. };
  39. extern struct asy asy[];
  40.  
  41. #define NULLASY    (struct asy *)0
  42.  
  43. /* Interrupt vector structure */
  44. struct ivec {
  45.     void (*oldvec)() ;        /* Original interrupt vector [cs:pc] */
  46.     char oldmask;            /* Original 8259 mask */
  47.     unsigned refcnt ;        /* How many asy's are using this int? */
  48.     struct asy *ichain ;    /* First asy in chain for this int */
  49. } ;
  50.  
  51. #define NIVECS    16
  52.  
  53. extern struct ivec ivec[] ;
  54.  
  55. extern unsigned h2ivec[] ;    /* map from handlers to vectors */
  56.  
  57. #define    BAUDCLK    115200L        /* 1.8432 Mhz / 16 */
  58.  
  59. /* 8250 definitions */
  60. /* Control/status register offsets from base address */
  61. #define    THR    0        /* Transmitter holding register */
  62. #define    RBR    0        /* Receiver buffer register */
  63. #define    DLL    0        /* Divisor latch LSB */
  64. #define    DLM    1        /* Divisor latch MSB */
  65. #define    IER    1        /* Interrupt enable register */
  66. #define    IIR    2        /* Interrupt ident register */
  67. #define    LCR    3        /* Line control register */
  68. #define    MCR    4        /* Modem control register */
  69. #define    LSR    5        /* Line status register */
  70. #define    MSR    6        /* Modem status register */
  71.  
  72. /* 8250 Line Control Register */
  73. #define    LCR_5BITS    0    /* 5 bit words */
  74. #define    LCR_6BITS    1    /* 6 bit words */
  75. #define    LCR_7BITS    2    /* 7 bit words */
  76. #define    LCR_8BITS    3    /* 8 bit words */
  77. #define    LCR_NSB        4    /* Number of stop bits */
  78. #define    LCR_PEN        8    /* Parity enable */
  79. #define    LCR_EPS        0x10    /* Even parity select */
  80. #define    LCR_SP        0x20    /* Stick parity */
  81. #define    LCR_SB        0x40    /* Set break */
  82. #define    LCR_DLAB    0x80    /* Divisor Latch Access Bit */
  83.  
  84. /* 8250 Line Status Register */
  85. #define    LSR_DR    1    /* Data ready */
  86. #define    LSR_OE    2    /* Overrun error */
  87. #define    LSR_PE    4    /* Parity error */
  88. #define    LSR_FE    8    /* Framing error */
  89. #define    LSR_BI    0x10    /* Break interrupt */
  90. #define    LSR_THRE 0x20    /* Transmitter line holding register empty */
  91. #define    LSR_TSRE 0x40    /* Transmitter shift register empty */
  92.  
  93. /* 8250 Interrupt Identification Register */
  94. #define    IIR_IP        1    /* 0 if interrupt pending */
  95. #define    IIR_ID        6    /* Mask for interrupt ID */
  96. #define    IIR_RLS        6    /* Receiver Line Status interrupt */
  97. #define    IIR_RDA        4    /* Receiver data available interrupt */
  98. #define    IIR_THRE    2    /* Transmitter holding register empty int */
  99. #define    IIR_MSTAT    0    /* Modem status interrupt */
  100.  
  101. /* 8250 interrupt enable register bits */
  102. #define    IER_DAV    1    /* Data available interrupt */
  103. #define    IER_TxE    2    /* Tx buffer empty interrupt */
  104. #define    IER_RLS    4    /* Receive line status interrupt */
  105. #define    IER_MS    8    /* Modem status interrupt */
  106.  
  107. /* 8250 Modem control register */
  108. #define    MCR_DTR    1    /* Data Terminal Ready */
  109. #define    MCR_RTS    2    /* Request to Send */
  110. #define    MCR_OUT1 4    /* Out 1 (not used) */
  111. #define    MCR_OUT2 8    /* Master interrupt enable (actually OUT 2) */
  112. #define    MCR_LOOP 0x10    /* Loopback test mode */
  113.  
  114. /* 8250 Modem Status Register */
  115. #define    MSR_DCTS 1    /* Delta Clear-to-Send */
  116. #define    MSR_DDSR 2    /* Delta Data Set Ready */
  117. #define    MSR_TERI 4    /* Trailing edge ring indicator */
  118. #define    MSR_DRLSD 8    /* Delta Rx Line Signal Detect */
  119. #define    MSR_CTS    0x10    /* Clear to send */
  120. #define    MSR_DSR 0x20    /* Data set ready */
  121. #define    MSR_RI    0x40    /* Ring indicator */
  122. #define    MSR_RLSD 0x80    /* Received line signal detect */
  123.  
  124.